home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / util / merge.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  3KB  |  93 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from operator import isMappingType, isSequenceType
  5. from primitives import Storage as S
  6. if 'sentinel' not in globals():
  7.     sentinel = object()
  8.  
  9.  
  10. def merge(*mappings, **opts):
  11.     d = { }
  12.     keytransform = opts.get('keytransform', (lambda k: k))
  13.     for elem in mappings:
  14.         if isMappingType(elem):
  15.             items = elem.iteritems()
  16.         elif isSequenceType(elem):
  17.             if not all((lambda .0: for s in .0:
  18. len(s) == 2)(elem)):
  19.                 raise TypeError('mapping sequences must be sequences of (key,value) pairs: %s %s' % (type(elem), repr(elem)))
  20.             
  21.             items = elem
  22.         else:
  23.             raise TypeError('all arguments to merge must be mappings: %r' % elem)
  24.         for key, value in items:
  25.             merge_values(d, keytransform(key), value, keytransform)
  26.         
  27.     
  28.     return d
  29.  
  30.  
  31. def merge_values(mapping, key, value, keytransform = None):
  32.     if keytransform is None:
  33.         
  34.         keytransform = lambda k: k
  35.     
  36.     curval = mapping.get(key, sentinel)
  37.     if curval is not sentinel and isMappingType(curval) and isMappingType(value):
  38.         for subkey, subvalue in value.iteritems():
  39.             merge_values(curval, keytransform(subkey), subvalue)
  40.         
  41.     else:
  42.         mapping[keytransform(key)] = value
  43.  
  44.  
  45. def lower_if_string(s):
  46.     
  47.     try:
  48.         return s.lower()
  49.     except AttributeError:
  50.         return s
  51.  
  52.  
  53.  
  54. def merge_keys(d):
  55.     if not d:
  56.         return d
  57.     
  58.     return tolower(merge(d, keytransform = lower_if_string))
  59.  
  60.  
  61. def tolower(mapping):
  62.     return S((lambda .0: for k, v in .0:
  63. (None, getattr(k, 'lower', (lambda k: k))() if isMappingType(v) else v)
  64.         
  65. )(mapping.iteritems()))
  66.  
  67.  
  68. def main():
  69.     d = {
  70.         1: 2 }
  71.     merge_values(d, 3, 4)
  72.     d = {
  73.         1: 2 }
  74.     merge_values(d, 1, 3)
  75.     d = {
  76.         1: {
  77.             2: 3 } }
  78.     d2 = {
  79.         1: {
  80.             2: 4 } }
  81.     res = merge(d, d2)
  82.     d = {
  83.         1: {
  84.             2: 3 } }
  85.     d2 = [
  86.         (1, {
  87.             2: 4 })]
  88.     res = merge(d, d2)
  89.  
  90. if __name__ == '__main__':
  91.     main()
  92.  
  93.